switchable_cat

reference

SECCON Beginners CTF 2023 作問者Writeup - Qiita

결과

문제 코드

PATH: 'vault://data/SECCON_Beginners_2023/switchable_cat/problem.py'

풀이

線形帰還シフトレジスタ(LFSR:Linear Feedback Shift Register

기반의 암호화

예를 위해

위와 같은 식을 간단하게 6개 비트로 이루어진 평문을 암호화 한다고 했을 때

b = ((r >> 1) & 1) ^ \
    ((r >> 2) & 1) ^ \
    ((r >> 3) & 1)

이때의 난수 생성기에서 반환되는 n번째 난수의 초기 seed가

seed=s0s1s2s3s4s5

로 표현하면 다음과 같은 행렬식으로 연산을 표현할 수 있다.

(anan1an2an3an4an5)=(000111100000010000001000000100000010)n(s0s1s2s3s4s5)

행렬곱은 sage 라이브러리를 이용하면 된다

POC

PATH: 'vault://data/SECCON_Beginners_2023/switchable_cat/poc.sage'

실패 원인

  1. 행렬곱 생각 못함(제목 검색해 볼 껄...)
  2. 처음에 그냥 shift-xor암호화라고 생각해서 계산한게 실패 요인
    1. shift-xor하면 정보 손실 일어난다고 생가해서 풀이 접근이 잘 못 되었다고 깨달았지만 행렬은 생각하지 못함